//
//  HMHomeDAL.swift
//  WB25
//
//  Created by HM on 2017/7/13.
//  Copyright © 2017年 itheima. All rights reserved.
//

import UIKit

class HMHomeDAL: NSObject {
    /*
        - 判断是否有缓存数据
            - 有
                - 直接返回
            - 没有
                - 网络获取数据
                - 把数据保存到本地
                - 返回数据
        - 通过时间来决定清理缓存
     */
    
}

//MARK: -判断是否有缓存数据

extension HMHomeDAL{
    
    class func checkCache(since_id:Int64, max_id: Int64, callback:@escaping ([[String: Any]]?)->()){
        // 获取本地数据
        let result = getCache(since_id: since_id, max_id: max_id)
        // 判断count
        if result.count > 0 {
            print("有缓存数据本地获取")
            callback(result)
        }else{
            print("没有缓存需要网络下载")
            // 发送网络请求
            HMNetworkTools.share.homeLoadData(since_id: since_id, max_id: max_id, success: { (response) in
                //            print("请求成功",response)
                // 判断它是否为nil 而且是否是一个字典
                guard let resDict = response as? [String: Any] else{
//                    finish(false, 0)
                    return
                }
                //            print(resDict)
                // 判断resDict["statuses"] 是否为nil 而且是否是一个[[string:any]]
                guard let resList = resDict["statuses"] as? [[String: Any]] else{
//                    finish(false, 0)
                    return
                }
                // 保存到本地
                saveCache(resList: resList)
                callback(resList)
                
            }, failure: { (error) in
                callback(nil)
            })
            
        }
    }
    
}

//MARK: -获取缓存数据
extension HMHomeDAL{
    
    class func getCache(since_id:Int64, max_id: Int64) -> [[String: Any]]{
        
        // 创建一个临时可变数组
        var tempList:[[String: Any]] = [[String: Any]]()
        
        // 判断userid是否wei nil
        guard let userId = HMOAuthViewModel.share.userAccountModel?.uid else {
            return tempList
        }
        
        // 首次必须网络加载 不能从本地拿
        if since_id == 0 && max_id == 0 {
            return tempList
        }
        
        // 准备sql
        var sql = ""
        sql += "SELECT * FROM T_Home\n"
        sql += "WHERE userid=\(userId)\n"
        // 下拉刷新
        if since_id > 0 {
            sql += "AND statusid>\(since_id)\n"
        }
        
        // 上拉加载更多
        if max_id > 0 {
            sql += "AND statusid<=\(max_id)\n"
        }
        
        sql += "ORDER BY statusid DESC\n"
        sql += "LIMIT 20"
        // 执行sql
        let resList = HMSQLManager.share.executeRecodeSet(sql: sql)
        // 遍历
        for dic in resList{
            let data = dic["status"] as! Data
            // 二进制转字典
            let dict = try! JSONSerialization.jsonObject(with: data, options: []) as! [String: Any]
            // 保存
            tempList.append(dict)
        }
        return tempList
    }
    
}

//MARK: -保存数据
extension HMHomeDAL{
    // 保存数据
    class func saveCache(resList: [[String: Any]]){
        
        // 判断
        guard let userId = HMOAuthViewModel.share.userAccountModel?.uid else {
            return
        }
        // 准备sql
        let sql = "INSERT OR REPLACE INTO T_Home (statusid,userid,status) VALUES (?,?,?)"
        // 执行sql(以事务方式来保存保存)
        HMSQLManager.share.queue.inTransaction { (db, rollback) in
            for dic in resList{
                // 微博id
                let statusId = dic["id"] as! Int64
                // 二进制
                let data = try! JSONSerialization.data(withJSONObject: dic, options: [])
                if db.executeUpdate(sql, withArgumentsIn: [statusId,userId,data]) == true {
                    print("保存数据成功")
                }else{
                    print("保存数据失败")
                    // 数据回滚
                    rollback.pointee = true
                }
            }
        }
    }
}
//MARK: -删除缓存数据
extension HMHomeDAL{
    class func deleteCache(){
        // 2017-07-13 11:09:03
        // 计算时间字符串
        let date = Date().addingTimeInterval(-60)
        // 时间格式化
        let df = DateFormatter()
        // 指定格式
        df.dateFormat = "yyyy-MM-dd HH:mm:ss"
        // 获取字符串
        let timeStr = df.string(from: date)
        // 准备sql
        let sql = "DELETE FROM T_Home WHERE createtime<'\(timeStr)'"
        
        // 执行sql
        HMSQLManager.share.queue.inDatabase { (db) in
            if db.executeStatements(sql) == true{
                print("删除成功\(db.changes)条数据")
            }else{
                print("删除数据失败")
            }

        }
    }
}
